import request from '@/utils/request'

/**
 * 获取邮件套餐列表
 * @returns {Promise}
 */
export function getEmailPackages() {
  return request({
    url: '/email/packages',
    method: 'get'
  })
}

/**
 * 购买邮件套餐
 * @param {Object} data 套餐ID
 * @returns {Promise}
 */
export function purchaseEmailPackage(packageId) {
  return request({
    url: '/email/purchase',
    method: 'post',
    params: { packageId }
  })
}

/**
 * 获取用户邮件配额
 * @returns {Promise}
 */
export function getEmailQuota() {
  return request({
    url: '/email/quota',
    method: 'get'
  })
}

/**
 * 获取邮件发送记录
 * @param {Object} params 查询参数
 * @returns {Promise}
 */
export function getEmailSendRecords(params) {
  return request({
    url: '/email/send-records',
    method: 'get',
    params
  })
}

/**
 * 发送邮件
 * @param {FormData} data 邮件内容和附件
 * @returns {Promise}
 */
export function sendEmail(data) {
  return request({
    url: '/email/send',
    method: 'post',
    data,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 定时发送邮件
 * @param {FormData} data 邮件内容和附件
 * @returns {Promise}
 */
export function scheduleSendEmail(data) {
  return request({
    url: '/email/schedule-send',
    method: 'post',
    data,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 删除邮件发送记录
 * @param {Number} id 记录ID
 * @returns {Promise}
 */
export function deleteEmailRecord(id) {
  return request({
    url: `/email/send-records/${id}`,
    method: 'delete'
  })
}

/**
 * 获取用户邮件余额
 * @returns {Promise}
 */
export function getUserEmailBalance() {
  return request({
    url: '/balance/info',
    method: 'get'
  })
}

/**
 * 发送JSON格式邮件（无附件）
 * @param {Object} data 邮件内容（JSON格式）
 * @returns {Promise}
 */
export function sendEmailJson(data) {
  return request({
    url: '/email/send-json',
    method: 'post',
    data
  })
}

/**
 * 定时发送JSON格式邮件（无附件）
 * @param {Object} data 邮件内容和定时信息（JSON格式）
 * @returns {Promise}
 */
export function scheduleSendEmailJson(data) {
  return request({
    url: '/email/schedule-send-json',
    method: 'post',
    data
  })
}

/**
 * 获取所有邮件发送记录（不分页，用于统计和图表）
 * @returns {Promise}
 */
export function getAllEmailSendRecords() {
  return request({
    url: '/email/all-send-records',
    method: 'get'
  })
}

/**
 * 验证邮箱凭证
 * @param {Object} data 邮箱验证信息
 * @param {string} data.emailAddress 邮箱地址
 * @param {string} data.authCode 授权码/密码
 * @param {string} data.emailProvider 邮箱发行商标识(qq,163,126,sina,gmail,outlook,yahoo)
 * @returns {Promise}
 */
export function verifyEmailCredentials(data) {
  return request({
    url: '/email/verify-credentials',
    method: 'post',
    data,
    timeout: 60000 // 增加超时时间到60秒
  })
}

/**
 * 保存用户邮箱信息（调用后端API）
 * @param {string} email 邮箱地址
 * @param {string} password 邮箱密码/授权码
 * @param {number} result 验证结果(1-成功,0-失败)
 * @param {string} emailProvider 邮箱发行商标识(qq,163,126,sina,gmail,outlook,yahoo)
 * @param {Object} oauthInfo 可选的OAuth信息(clientId,tenantId,redirectUri,clientSecret)
 * @returns {Promise}
 */
export function saveUserEmail(email, password, result, emailProvider, oauthInfo) {
  const data = {
    email,
    password,
    result,
    emailProvider
  }
  
  // 如果提供了OAuth信息，添加到请求中
  if (oauthInfo) {
    data.clientId = oauthInfo.clientId
    data.tenantId = oauthInfo.tenantId
    data.redirectUri = oauthInfo.redirectUri
    data.clientSecret = oauthInfo.clientSecret
  }
  
  return request({
    url: '/email/save-email',
    method: 'post',
    data
  })
}

/**
 * 获取用户邮箱设置
 * @returns {Promise}
 */
export function getUserEmail() {
  return request({
    url: '/email/get-user-email',
    method: 'get'
  })
}

/**
 * 获取用户已验证的邮箱列表
 * @returns {Promise}
 */
export function getVerifiedEmails() {
  return request({
    url: '/email/verified-emails',
    method: 'get'
  })
}

/**
 * 使用自定义邮箱发送邮件（JSON格式）
 * @param {Object} data 邮件内容及发送信息
 * @returns {Promise}
 */
export function sendCustomEmail(data) {
  return request({
    url: '/email/send-custom',
    method: 'post',
    data
  })
}

/**
 * 使用自定义邮箱发送带附件的邮件
 * @param {FormData} formData 包含邮件信息和附件的FormData对象
 * @returns {Promise}
 */
export function sendCustomEmailWithAttachments(formData) {
  return request({
    url: '/email/send-custom-with-attachments',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 获取所有邮箱配置（包括已验证和未验证的）
 * @returns {Promise}
 */
export function getAllUserEmails() {
  return request({
    url: '/email/all-emails',
    method: 'get'
  })
}

/**
 * 添加用户邮箱配置（仅添加，不验证）
 * @param {Object} data 邮箱信息
 * @param {string} data.email 邮箱地址
 * @param {string} data.emailProvider 邮箱发行商
 * @returns {Promise}
 */
export function addUserEmail(data) {
  return request({
    url: '/email/add-email',
    method: 'post',
    data
  })
}

/**
 * 删除用户邮箱配置
 * @param {string|number} email 邮箱配置email
 * @returns {Promise}
 */
export function deleteUserEmail(email) {
  return request({
    url: '/email/delete-by-email',
    method: 'delete',
    params: {
      email: email
    }
  })
}

/**
 * 修改用户邮箱配置
 * @param {Object} data 邮箱配置信息
 * @param {number} data.id 邮箱配置ID
 * @param {string} data.email 邮箱地址
 * @param {string} data.emailProvider 邮箱发行商
 * @param {string} [data.emailPassword] 授权码(非Outlook邮箱)
 * @param {string} [data.clientId] ClientID(Outlook邮箱)
 * @param {string} [data.tenantId] TenantID(Outlook邮箱)
 * @param {string} [data.redirectUri] RedirectURI(Outlook邮箱)
 * @param {string} [data.clientSecret] ClientSecret(Outlook邮箱)
 * @returns {Promise}
 */
export function updateUserEmail(data) {
  return request({
    url: '/email/update-email',
    method: 'put',
    data
  })
}

/**
 * 下载附件
 * @param {string} attachmentPath 附件路径
 * @returns {Promise}
 */
export function downloadAttachment(attachmentPath) {
  return request({
    url: '/email/download-attachment',
    method: 'get',
    params: { path: attachmentPath },
    responseType: 'blob', // 返回二进制数据流
    transformResponse: [function(data) {
      // 不对响应数据进行任何转换，直接返回原始数据
      return data;
    }]
  })
}

/**
 * 获取附件预览链接
 * @param {string} attachmentPath 附件路径
 * @returns {Promise}
 */
export function getAttachmentPreviewUrl(attachmentPath) {
  return request({
    url: '/email/attachment-preview-url',
    method: 'get',
    params: { path: attachmentPath }
  })
}

 